In a multi-processing system, a group of processors execute a variety of tasks. Data is transferred between the processors through one or more Direct Memory Access (DMA) channels.
For example, one type of multi-processing system has a host processor. The host processor has data memory, typically in the form of Random Access Memory (RAM). Such memory is referred to hereafter as "DRAM", which is not to be confused with "Dynamic RAM" although the memory may be implemented with Dynamic RAM modules, but need not necessarily be so implemented. Remote processors are provided, each of which has its own DRAM.
The individual remote processors perform one or more processing tasks. For example, in performing a processing task, a remote processor often accesses data (or code) in the host processor DRAM and transfers a copy of that data to the remote processor's DRAM. The remote processor then executes processing on the data. When finished processing, the data in the remote processor DRAM is made available to the host processor. The data is transferred from the remote processor DRAM to the host processor DRAM. Thus, the host processor can utilize the processed data.
Such transfers of data between the host processor DRAM and a remote processor DRAM occur through a DMA channel. The transfer is called "direct" because the host processor does not participate in the access to its DRAM by the remote processor.
However, in prior art multi-processing systems, this directness of memory access only occurs at the host processor end of the DMA channel. At the remote processor end of the DMA channel, the remote processor participates in the data transfer. Each remote processor has a operating system or kernel. The kernel keeps track of all of the DMA requests required by each processing task of that remote processor. The kernel must also inform tasks executing on the remote processor when the DMA request is complete, so that the task can continue to execute. It is desirable to accomplish direct memory access without involving the kernel of a remote processor, so that the kernel can be free to accomplish other tasks.